package cn.wm.netty.http;

import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.HttpServerCodec;
import io.netty.handler.codec.http.HttpServerExpectContinueHandler;

/**
 * 自定义handler初始化类
 */
public class HttpServerHandlerInitializer extends ChannelInitializer<Channel> {
    @Override
    protected void initChannel(Channel channel) throws Exception {
        ChannelPipeline pipeline = channel.pipeline();
        /**
         * 或者使用HttpRequestDecoder & HttpResponseEncoder
         */
        pipeline.addLast(new HttpServerCodec());
        /**
         * 在处理POST消息体时需要加上
         */
        pipeline.addLast(new HttpObjectAggregator(65536));
        /**
         * 这个方法的作用是:
         *      http 100-continue用于客户端在发送POST数据给服务器前，征询服务器情况，看服务器是否处理POST的数据，
         *          如果不处理，客户端则不上传POST数据，
         *          如果处理，则POST上传数据。在现实应用中，
         *      通过在POST大数据时，才会使用100-continue协议
         */
        pipeline.addLast(new HttpServerExpectContinueHandler());
        //自己定义的handler
        pipeline.addLast(new HttpHandler());
    }
}
